Julia - Vizuelizacija podataka - Animacije i teme

In [ ]:
#Animacije predstavljaju grafički prikaz podataka koji se menja u toku vremena. 

#Kreiranje animacije se  vrši u nekoliko koraka:

#1. Kreiranje objekta tipa Animation
#2. Čuvanje svakog frejma animacije                #može se realizovati na više načina
#3. Konverzija sačuvanih frejmova u gif
In [ ]:
using Plots
In [ ]:
t = -5:0.05:5;     #definišemo podelu ose za koju želimo iscrtavanje - od nje i od brzine frejmova po sekundi
                   #će zavisiti brzina naše animacije
y = t .^2;
pomeraj = 2;   #definišemo pomeraj takav da se svaki novi plot th. frejm razlikuje za ovaj broj tačaka koji treba 
               #plot-ovati
 
N = length(t);

anim = @animate for i = 1:pomeraj:N          #svaki put iterativno radimo uvećavanje ovog objekta - svaki novi element je frejm!     
    plot(t[1:i], y[1:i])                     #zadužen je makro animate
end
 
gif(anim, "y = t^2 funkcija.gif", fps = 20)      #konačno, koristeći makro gif, kome kao prvi argument prosleđujemo
                                                 #našu animaciju, kao drugi kako želimo da je sačuvamo, a kao treći argument 
                                                 #prosleđujemo brzinu frejmova koji će se prikazivati po sekundi
In [ ]:
t = -5:0.05:5;     
y = t .^2;
pomeraj = 2;   
 
N = length(t);

anim = @animate for i = 1:pomeraj:N              
    plot(t[1:i], y[1:i]); 
    frame(anim);                                    #Ukoliko ne želimo da imamo iscrtavanje u našem okruženju, ali želimo
                                                    #sačuvani gif, potrebno je onemogućiti operacije ispisa za plot i gif
                                                    #sa operatorom ;, a za čuvanje frejmova u animaciju možemo koristiti
                                                    #funkciju frame(), koja kao argument prima animaciju u kojoj želimo 
                                                    #da sačuvamo trenutni frejm
    
end
 
gif(anim, "y = t^2 funkcija - drugi način.gif", fps = 20)
In [ ]:
#Animacije nisu ograničene samo na iscrtavanje 2D grafika. Moguće je vršiti i pravljenje animacija za 3D plot-ove,
#heatmap-e, površine ....

t = -2*pi : 0.1: 2*pi;
u = sin.(t);
v = cos.(t);

N = length(u);

k = t;  

plt1 = plot3d(
    1,
    xlim = (-10, 10),
    ylim = (-10, 10),
    zlim = (-10, 10),
    title = "Spirala",
    marker = 3,
)

@gif for i=1:N   
    push!(plt1,u[i], v[i], k[i])
    end every 5
In [ ]:
#Plotovanje heatmap-a
anim = @animate for i = 1:50
    mat = randn(5, 5);
    heatmap(mat, c=:cool)
end
 
gif(anim, "heatmap_primer.gif", fps = 5)
In [ ]:
# Teme (Themes)
In [ ]:
#Teme predstavljaju opciju koja služi za dodatno ukrašavanje naših grafika.
#One su primenljive na sve vrste plot-ova, te ćemo stoga ovde dati demonstraciju kako se neke od njih koriste.
#Ukoliko ništa sami ne preduzmemo po pitanju definisanje teme, programski jezik Julia ima svoju podrazumevanu temu,
#koju smo do sada svo vreme koristili
In [ ]:
#Tema se postavlja pre nego što se vrši bilo kakvo plotovanje rezultata. Ukoliko želimo prvo da koristimo jednu temu,
#a onda potom neku drugu, to postižemo tako što ponovo vršimo definisanje naše teme:

theme(:sand)
In [ ]:
t = -5:0.05:5;     
                   
y = t .^2;
pomeraj = 2;    
               
 
N = length(t);

anim = @animate for i = 1:pomeraj:N               
    plot(t[1:i], y[1:i])                     
end
 
gif(anim, "y = t^2 funkcija_sand.gif", fps = 20)
In [ ]:
theme(:dark) #redefinišemo temu

#Plotovanje heatmap-a
anim = @animate for i = 1:50
    mat = randn(5, 5);
    heatmap(mat, c=:cool)
end
 
gif(anim, "heatmap_primer_dark.gif", fps = 5)
In [ ]:
theme(:lime)
In [ ]:
t = range(-4*π, 4*π, length = 1000);
plot(2*sin.(t), cos.(t), t,title = "Spirala", lw = 3)
In [ ]:
theme(:vibrant)
In [ ]:
u = range(-5, 5, length = 1000);
v = range(-5, 5, length = 1000);
f(x, y) = x.^2 + y.^2;   
contour(u, v, f, title = "Parabola")   #contour je poseban tip crtanja grafika funkcije kod koje se iscrtavanje svodi na 2D ravan
                                       #a crtež će se sastojati od linija koje povezuju tačke sa istim vrednostima funcije
In [ ]: